package com.ruoyi.user.service;

import com.ruoyi.system.domain.SpffVideos;

import java.math.BigDecimal;
import java.util.List;

/**
 * 视频推荐Service接口
 * 
 * @author xjj
 * @date 2025-09-23
 */
public interface IVideoRecommendService 
{
    /**
     * 个性化推荐视频
     * 基于用户历史观看、点赞等行为推荐相似视频
     * 
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 推荐视频列表
     */
    public List<SpffVideos> getPersonalizedRecommend(Long userId, Integer pageNum, Integer pageSize);

    /**
     * 获取热门视频榜单
     * 
     * @param type 榜单类型：global-全站热门，category-分类热门
     * @param categoryId 分类ID（当type为category时必传）
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 热门视频列表
     */
    public List<SpffVideos> getHotVideos(String type, Long categoryId, Integer pageNum, Integer pageSize);

    /**
     * 获取附近的视频
     * 
     * @param latitude 纬度
     * @param longitude 经度
     * @param radius 搜索半径（公里）
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 附近视频列表
     */
    public List<SpffVideos> getNearbyVideos(BigDecimal latitude, BigDecimal longitude, Integer radius, Integer pageNum, Integer pageSize);

    /**
     * 获取最新视频
     * 
     * @param categoryId 分类ID（可选）
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 最新视频列表
     */
    public List<SpffVideos> getLatestVideos(Long categoryId, Integer pageNum, Integer pageSize);

    /**
     * 随机获取视频
     * 用于冷启动或增加推荐多样性
     * 
     * @param size 获取数量
     * @return 随机视频列表
     */
    public List<SpffVideos> getRandomVideos(Integer size);
}
